Java 从MySQL到Android应用程序获取数据
我想使用PHP从MySQL数据库获取数据,并在Android活动中显示它。我编写代码并传递JSON数组,但有一个问题我不知道如何连接到服务器,我的所有数据库都在本地服务器上。我编码它,请告诉我哪里出了问题,这样我就可以得到准确的结果。我会非常感谢你的 my all数据库位于localhost中,未打开活动。显示错误“意外停止”:(如何获得准确结果。请指导我) 现在它给出了以下错误:(和)加载保存的详细信息Java 从MySQL到Android应用程序获取数据,java,php,android,mysql,json,Java,Php,Android,Mysql,Json,我想使用PHP从MySQL数据库获取数据,并在Android活动中显示它。我编写代码并传递JSON数组,但有一个问题我不知道如何连接到服务器,我的所有数据库都在本地服务器上。我编码它,请告诉我哪里出了问题,这样我就可以得到准确的结果。我会非常感谢你的 my all数据库位于localhost中,未打开活动。显示错误“意外停止”:(如何获得准确结果。请指导我) 现在它给出了以下错误:(和)加载保存的详细信息 12-08 11:09:19.314: E/WindowManager(19972
12-08 11:09:19.314: E/WindowManager(19972): Activity com.example.visit.record.My_Task has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40555850 that was originally added here
12-08 11:09:19.314: E/WindowManager(19972): android.view.WindowLeaked: Activity com.example.visit.record.My_Task has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40555850 that was originally added here
12-08 11:09:19.314: E/WindowManager(19972): at android.view.ViewRoot.<init>(ViewRoot.java:277)
12-08 11:09:19.314: E/WindowManager(19972): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
12-08 11:09:19.314: E/WindowManager(19972): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
12-08 11:09:19.314: E/WindowManager(19972): at android.view.Window$LocalWindowManager.addView(Window.java:433)
12-08 11:09:19.314: E/WindowManager(19972): at android.app.Dialog.show(Dialog.java:288)
12-08 11:09:19.314: E/WindowManager(19972): at com.example.visit.record.My_Task$GetTaskDetails.onPreExecute(My_Task.java:149)
12-08 11:09:19.314: E/WindowManager(19972): at android.os.AsyncTask.execute(AsyncTask.java:391)
12-08 11:09:19.314: E/WindowManager(19972): at com.example.visit.record.My_Task.onCreate(My_Task.java:107)
12-08 11:09:19.314: E/WindowManager(19972): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
12-08 11:09:19.314: E/WindowManager(19972): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1785)
12-08 11:09:19.314: E/WindowManager(19972): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1842)
12-08 11:09:19.314: E/WindowManager(19972): at android.app.ActivityThread.access$1500(ActivityThread.java:132)
12-08 11:09:19.314: E/WindowManager(19972): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
12-08 11:09:19.314: E/WindowManager(19972): at android.os.Handler.dispatchMessage(Handler.java:99)
12-08 11:09:19.314: E/WindowManager(19972): at android.os.Looper.loop(Looper.java:143)
12-08 11:09:19.314: E/WindowManager(19972): at android.app.ActivityThread.main(ActivityThread.java:4268)
12-08 11:09:19.314: E/WindowManager(19972): at java.lang.reflect.Method.invokeNative(Native Method)
12-08 11:09:19.314: E/WindowManager(19972): at java.lang.reflect.Method.invoke(Method.java:507)
12-08 11:09:19.314: E/WindowManager(19972): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-08 11:09:19.314: E/WindowManager(19972): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-08 11:09:19.314: E/WindowManager(19972): at dalvik.system.NativeStart.main(Native Method)
12-08 11:09:19.314:E/WindowManager(19972):Activity com.example.visit.record.My_任务泄漏了window com.android.internal.policy.impl.PhoneWindow$DecorView@40555850原来是加在这里的
12-08 11:09:19.314:E/WindowManager(19972):android.view.WindowLeaked:Activity com.example.visit.record.My_任务泄漏了window com.android.internal.policy.impl.PhoneWindow$DecorView@40555850原来是加在这里的
12-08 11:09:19.314:E/WindowManager(19972):在android.view.ViewRoot(ViewRoot.java:277)
12-08 11:09:19.314:E/WindowManager(19972):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
12-08 11:09:19.314:E/WindowManager(19972):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
12-08 11:09:19.314:E/WindowManager(19972):在android.view.Window$LocalWindowManager.addView(Window.java:433)
12-08 11:09:19.314:E/WindowManager(19972):在android.app.Dialog.show(Dialog.java:288)
12-08 11:09:19.314:E/WindowManager(19972):在com.example.visit.record.My_Task$GetTaskDetails.onPreExecute(My_Task.java:149)
12-08 11:09:19.314:E/WindowManager(19972):在android.os.AsyncTask.execute(AsyncTask.java:391)
12-08 11:09:19.314:E/WindowManager(19972):在com.example.visit.record.My_Task.onCreate(My_Task.java:107)
12-08 11:09:19.314:E/WindowManager(19972):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
12-08 11:09:19.314:E/WindowManager(19972):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1785)
12-08 11:09:19.314:E/WindowManager(19972):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1842)
12-08 11:09:19.314:E/WindowManager(19972):在android.app.ActivityThread.access$1500(ActivityThread.java:132)
12-08 11:09:19.314:E/WindowManager(19972):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
12-08 11:09:19.314:E/WindowManager(19972):位于android.os.Handler.dispatchMessage(Handler.java:99)
12-08 11:09:19.314:E/WindowManager(19972):位于android.os.Looper.loop(Looper.java:143)
12-08 11:09:19.314:E/WindowManager(19972):在android.app.ActivityThread.main(ActivityThread.java:4268)
12-08 11:09:19.314:E/WindowManager(19972):位于java.lang.reflect.Method.Invokenactive(本机方法)
12-08 11:09:19.314:E/WindowManager(19972):位于java.lang.reflect.Method.invoke(Method.java:507)
12-08 11:09:19.314:E/WindowManager(19972):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-08 11:09:19.314:E/WindowManager(19972):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-08 11:09:19.314:E/WindowManager(19972):在dalvik.system.NativeStart.main(本机方法)
目前,您正在尝试访问Ui元素或doInBackground
中的doInBackground
中的AsyncTask
类。因为无法从doInBackground
访问Ui元素,所以可以对upda使用onPreExecute
和onPostExecute
ting UI元素。将代码更改为,而不使用runOnUiThread
或doInBackground
中的UI元素:
class GetProductDetails extends AsyncTask<String, String, JSONObject> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
tDialog = new ProgressDialog(My_Task.this);
tDialog.setMessage("Loading task details. Please wait...");
tDialog.setIndeterminate(false);
tDialog.setCancelable(true);
tDialog.show();
}
protected JSONObject doInBackground(String... params) {
JSONObject my_task
// Check for success tag
int success;
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("cid", cid));
// getting product details by making HTTP request
// Note that product details url will use GET request
JSONObject json = JSONParser.makeHttpRequest(
url_read_mytask, "GET", params);
// check your log for json response
Log.d("Single Task Details", json.toString());
// json success tag
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// successfully received product details
JSONArray my_taskObj = json
.getJSONArray(TAG_MYTASK); // JSON Array
// get first product object from JSON Array
my_task = my_taskObj.getJSONObject(0);
}
else
{
// task with cid not found
}
}
catch (JSONException e) {
e.printStackTrace();
}
return my_task;
}
protected void onPostExecute(JSONObject my_task) {
// dismiss the dialog once got all details
// task with this cid found
// Edit Text
// display task data in EditText
cus_name_txtbx = (EditText) findViewById(R.id.cus_name_txt);
cus_name_txtbx.setText(my_task.getString(TAG_NAME));
contact_no_txtbx = (EditText) findViewById(R.id.contact_no_txt);
contact_no_txtbx.setText(my_task.getString(TAG_CONTACT));
ticket_no_txtbx = (EditText) findViewById(R.id.ticket_no_txt);
ticket_no_txtbx.setText(my_task.getString(TAG_TICKET));
task_detail_txtbx = (EditText) findViewById(R.id.task_detail_txt);
task_detail_txtbx.setText(my_task.getString(TAG_TASKDETAIL));
tDialog.dismiss();
}
有一件事是显而易见的。您不能从后台线程更改
UI
这是你在干什么
cus_name_txtbx = (EditText) findViewById(R.id.cus_name_txt);
cus_name_txtbx.setText(my_task.getString(TAG_NAME));
contact_no_txtbx = (EditText) findViewById(R.id.contact_no_txt);
contact_no_txtbx.setText(my_task.getString(TAG_CONTACT));
ticket_no_txtbx = (EditText) findViewById(R.id.ticket_no_txt);
ticket_no_txtbx.setText(my_task.getString(TAG_TICKET));
task_detail_txtbx = (EditText) findViewById(R.id.task_detail_txt);
task_detail_txtbx.setText(my_task.getString(TAG_TASKDETAIL));
在
GetProductDetails
@Mohsin的doInBackground
中,对不起,我不理解“无法从后台更改UI”。我该怎么做才能获得所需的结果?等待您出现其他错误。什么是lineMy_Task.java:82
?行号My_Task.onCreate(My_Task.java:82)在哪里在My_Task类中,第82行是:Attain_by_txtbx=(EditText)findViewById(R.id.Attain_by_txt);然后查看My_Task xml布局并检查您是否具有EditText或TextView@Mona:我敢肯定,在您的布局或java代码中的某个地方,您正试图将文本视图转换为EditTextThank alot n alotρцσѕρєK:)
cus_name_txtbx = (EditText) findViewById(R.id.cus_name_txt);
cus_name_txtbx.setText(my_task.getString(TAG_NAME));
contact_no_txtbx = (EditText) findViewById(R.id.contact_no_txt);
contact_no_txtbx.setText(my_task.getString(TAG_CONTACT));
ticket_no_txtbx = (EditText) findViewById(R.id.ticket_no_txt);
ticket_no_txtbx.setText(my_task.getString(TAG_TICKET));
task_detail_txtbx = (EditText) findViewById(R.id.task_detail_txt);
task_detail_txtbx.setText(my_task.getString(TAG_TASKDETAIL));