没有在logcat中生成JSON输出

时间:2014-04-07 12:49:45

标签: android json

您好我正在开发一个基于Web服务的应用程序,我想从MySQL远程服务器检索数据并将其显示在logcat中。但我收到一个错误:

Your content must have a ListView whose id attribute is 'android.R.id.list'. 

事实是我在布局文件中没有提到ListView。在此我附上了我的java文件和logcat报告。服务器端的响应运行良好。

JSON响应的URL:vishwas.meximas.com/apps.php

MainActivity.java

    public class MainActivity extends ListActivity {
        ProgressDialog progress;
        JSONParser parser = new JSONParser();
        JSONObject object;
        JSONArray array;
        ArrayList<HashMap<String, String>> info_list;

        String URL = "http://vishwa.meximas.com/apps.php";

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            info_list = new ArrayList<HashMap<String, String>>();
            new loadinfo().execute();
        }

        class loadinfo extends AsyncTask<String, String, String> {

            @Override
            protected void onPreExecute() {
                // TODO Auto-generated method stub
                super.onPreExecute();
                progress=new ProgressDialog(MainActivity.this);
                progress.setMessage("Loading User Info.....");
                progress.setIndeterminate(false);
                progress.setCancelable(false);
                progress.show();
            }

            @Override
            protected String doInBackground(String... params) {
                // TODO Auto-generated method stub
                List<NameValuePair>  list =new ArrayList<NameValuePair>();
            JSONObject json=parser.makeHttpRequest1(URL, "GET", list);
            Log.d("RECEIVED", json.toString());
                return null;
            }

            @Override
            protected void onPostExecute(String result) {
                // TODO Auto-generated method stub
                super.onPostExecute(result);
            }

        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    }

我的第二个java文件是 JSONParser.java

    package com.example.webservice_call;

    public class JSONParser {
        static InputStream is = null;
        static JSONObject jObj = null;
        static String json = "";

        // constructor
        public JSONParser() {

        }

        public JSONObject makeHttpRequest1(String url, String method,
                List<NameValuePair> params) {

            // Making HTTP request
            try {

                // check for request method
                if(method == "POST"){
                    // request method is POST
                    // defaultHttpClient
                    DefaultHttpClient httpClient = new DefaultHttpClient();
                    HttpPost httpPost = new HttpPost(url);
                    httpPost.setEntity(new UrlEncodedFormEntity(params));

                    HttpResponse httpResponse = httpClient.execute(httpPost);
                    HttpEntity httpEntity = httpResponse.getEntity();
                    is = httpEntity.getContent();

                }else if(method == "GET"){
                    // request method is GET
                    DefaultHttpClient httpClient = new DefaultHttpClient();
                    String paramString = URLEncodedUtils.format(params, "utf-8");
                    url += "?" + paramString;
                    HttpGet httpGet = new HttpGet(url);

                    HttpResponse httpResponse = httpClient.execute(httpGet);
                    HttpEntity httpEntity = httpResponse.getEntity();
                    is = httpEntity.getContent();
                }           


            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        is, "iso-8859-1"), 8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                json = sb.toString();
            } catch (Exception e) {
                Log.e("Buffer Error", "Error converting result " + e.toString());
            }

            // try parse the string to a JSON object
            try {
                jObj = new JSONObject(json);
            } catch (JSONException e) {
                Log.e("JSON Parser", "Error parsing data " + e.toString());
            }

            // return JSON String
            return jObj;
        }
    }

收到的Logcat错误是:

    04-07 12:34:54.988: E/AndroidRuntime(1243): FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.webservice_call/com.example.webservice_call.MainActivity}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
    at android.app.ActivityThread.access$600(ActivityThread.java:141)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5041)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
    at android.app.ListActivity.onContentChanged(ListActivity.java:243)
    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:273)
    at android.app.Activity.setContentView(Activity.java:1881)
    at com.example.webservice_call.MainActivity.onCreate(MainActivity.java:31)
    at android.app.Activity.performCreate(Activity.java:5104)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
    ... 11 more

请帮我解决这个错误。

3 个答案:

答案 0 :(得分:0)

我认为MainActivity extends Activity应解决您的问题

答案 1 :(得分:0)

Your content must have a ListView whose id attribute is 'android.R.id.list'

因此,基本上首先在您的xml文件中,ListView的ID为@android:id/list

之后,您需要找到ListView的ID。使ListView变量全局

ListView lv,

现在使用onCreate()方法。

lv = (ListView)findViewById(android.R.id.list);

答案 2 :(得分:0)

这是解决方案JSONParser.java ...

只需将此类放入代码中即可查看结果..

package com.example.orientation;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

public class JSONParser {
        static InputStream is = null;
        static JSONObject jObj = null;
        static String json = "";

        // constructor
        public JSONParser() {

        }

        public JSONObject makeHttpRequest1(String url, String method,
                List<NameValuePair> params) {

            // Making HTTP request
            try {

                // check for request method
                if(method == "POST"){
                    // request method is POST
                    // defaultHttpClient
                    DefaultHttpClient httpClient = new DefaultHttpClient();
                    HttpPost httpPost = new HttpPost(url);
                    httpPost.setEntity(new UrlEncodedFormEntity(params));

                    HttpResponse httpResponse = httpClient.execute(httpPost);
                    HttpEntity httpEntity = httpResponse.getEntity();
                    is = httpEntity.getContent();

                }else if(method == "GET"){
                    // request method is GET
                    DefaultHttpClient httpClient = new DefaultHttpClient();
                    String paramString = URLEncodedUtils.format(params, "utf-8");
                    url += "?" + paramString;
                    HttpGet httpGet = new HttpGet(url);

                    HttpResponse httpResponse = httpClient.execute(httpGet);
                    HttpEntity httpEntity = httpResponse.getEntity();
                    is = httpEntity.getContent();
                }           


            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        is, "iso-8859-1"), 8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                json = sb.toString();
            } catch (Exception e) {
                Log.e("Buffer Error", "Error converting result " + e.toString());
            }

            // try parse the string to a JSON object
            try {
                jObj = new JSONObject(json);
            } catch (JSONException e) {
                Log.e("JSON Parser", "Error parsing data " + e.toString());
                JSONObject obj = new JSONObject();
                try {
                    obj.put("result", new JSONArray(json));
                    jObj=obj;
                } catch (JSONException e1) {
                 // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }

            // return JSON String
            return jObj;
        }
    }

实际上有一个问题,你的web服务的响应是JSONArray,你在JSONObject中接收它。我修改你的JSONParser类请代码......

 // try parse the string to a JSON object
                try {
                    jObj = new JSONObject(json);
                } catch (JSONException e) {
                    Log.e("JSON Parser", "Error parsing data " + e.toString());
                    JSONObject obj = new JSONObject();
                    try {
                        obj.put("result", new JSONArray(json));
                        jObj=obj;
                    } catch (JSONException e1) {
                     // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                }

                // return JSON String
                return jObj;
            }

[
{
Id: "1",
Name: "GST",
Address: "Alapakkam"
},
{
Id: "2",
Name: "GST1",
Address: "Chennai"
}
]