【问题标题】:I get this error : java.lang.NullPointerException:lock ==null我收到此错误:java.lang.NullPointerException:lock ==null
【发布时间】:2014-06-04 22:37:23
【问题描述】:

我正在尝试从 Android 中的 localhost 获取 json。但是我有一些问题要获取 Json 。 我收到此错误:java.lang.NullPointerException: lock == null。 请帮助我如何解决这个问题。我的代码在这里:

public class HomeFragment extends Fragment   {

    View v;
    JSONArray android=null;
    ListView list;
    ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>();
    TextView id;
    TextView name;
    TextView price;
    ConnectionTask mConTask = null;
    ProgressDialog progressDialog = null;
    JsonCreator jsonCreator = new JsonCreator();
    private static  String url="http://localhost:59124/Products.aspx";
    private static final String TAG_OS = "android";
      private static final String TAG_ID = "ProductID";
      private static final String TAG_PRODUCTNAME = "ProductName";
      private static final String TAG_PRICE = "UnitPrice";

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        oslist = new ArrayList<HashMap<String, String>>();
         new ConnectionTask().execute();
    }

    public HomeFragment(){}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
    {   
            v = inflater.inflate(R.layout.fragment_home, container, false);
            return v;
    }

    public class ConnectionTask extends AsyncTask<String, String, JSONObject>{

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
             id = (TextView)v.findViewById(R.id.id);
             name = (TextView)v.findViewById(R.id.name);
             price = (TextView)v.findViewById(R.id.price);
                progressDialog = ProgressDialog.show(getActivity(), "", "Yükleniyor... ",true ,true);

        }

        @Override
        protected JSONObject doInBackground(String... params) {
            JSONParser jParser = new JSONParser();
            JSONObject json = jParser.getJSONFromUrl(url);
            return json;
        }

        @Override
        protected void onPostExecute( JSONObject json) {

            if(json == null){

                //İnternet kontrolü
                if(!Constants.isInternetAvailable(getActivity())){
                    progressDialog.dismiss();
                    Toast toast = Toast.makeText(getActivity(), "Lütfen internet bağlantınızı kontrol ediniz.", Toast.LENGTH_SHORT);
                    toast.setGravity(Gravity.CENTER, 0, 0);
                    toast.show();
                }
                //İnternet var ise veri boş
                else{
                    progressDialog.dismiss();
                    Toast toast = Toast.makeText(getActivity(), "Hiçbir veri bulunmamaktadır.", Toast.LENGTH_SHORT);
                    toast.setGravity(Gravity.CENTER, 0, 0);
                    toast.show();
                } 
            }
            else{
                    try {
                    // Getting JSON Array from URL
                    android = json.getJSONArray(TAG_OS);
                    for(int i = 0; i < android.length(); i++){
                    JSONObject c = android.getJSONObject(i);
                    String id = c.getString(TAG_ID);
                    String name = c.getString(TAG_PRODUCTNAME);
                    String price = c.getString(TAG_PRICE);
                    HashMap<String, String> map = new HashMap<String, String>();
                    map.put(TAG_ID, id);
                    map.put(TAG_PRODUCTNAME, name);
                    map.put(TAG_PRICE, price);
                    oslist.add(map);
                    list=(ListView)v.findViewById(R.id.listView1);
                    ListAdapter adapter = new SimpleAdapter(getActivity(), oslist,
                            R.layout.list_v,
                            new String[] { TAG_ID,TAG_PRODUCTNAME, TAG_PRICE }, new int[] {
                                    R.id.id,R.id.name, R.id.price});

                    list.setAdapter(adapter);   
                    progressDialog.dismiss();
                    }
                }
                catch (JSONException e) {
                    e.printStackTrace();
                }

        }
        }
        @Override
        protected void onCancelled() {
            mConTask = null;
            progressDialog.dismiss();
        }

    }
}

.NET 代码在这里:

 string stroutput = "";

                   try
            {
                string conStr = @"data source=.;database=Kelepir;Integrated Security=True;";
                //string conStr = "data source=.;database=Northwind;user=Android;password=123456;Integrated Security=True;";
                SqlConnection connection = new SqlConnection(conStr);
                connection.Open();
                string myquery = "select ProductID,ProductName,CategoryName,UnitPrice from Products";
                SqlCommand cmd = new SqlCommand(myquery, connection);
                SqlDataReader reader = cmd.ExecuteReader();
                var rowList = new List<object>();       
                while (reader.Read())
               {
                var nes = new
               { 

                ProductID = reader["ProductID"].ToString(),
                ProductName = reader["ProductName"].ToString(),
                CategoryName = reader["CategoryName"].ToString(),
                UnitPrice = reader["UnitPrice"].ToString()
             };
             rowList.Add(nes);

        }
                var serializeMe = new { android = rowList };
             stroutput = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(serializeMe );
             Response.Write(stroutput);

            }
                  catch (Exception ex)
            {
                stroutput = "ERROR : " + ex.Message;
            }

和日志聊天:

04-20 21:00:40.312: E/Buffer Error(4742): Error converting result java.lang.NullPointerException: lock == null
    04-20 21:00:40.312: E/JSON Parser(4742): Error parsing data org.json.JSONException: End of input at character 0 of 
    04-20 21:00:40.740: E/AndroidRuntime(4742): FATAL EXCEPTION: main
    04-20 21:00:40.740: E/AndroidRuntime(4742): Process: info.androidhive.slidingmenu, PID: 4742
    04-20 21:00:40.740: E/AndroidRuntime(4742): java.lang.SecurityException: ConnectivityService: Neither user 10055 nor current process has android.permission.ACCESS_NETWORK_STATE.
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at android.os.Parcel.readException(Parcel.java:1465)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at android.os.Parcel.readException(Parcel.java:1419)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at android.net.IConnectivityManager$Stub$Proxy.getActiveNetworkInfo(IConnectivityManager.java:813)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at android.net.ConnectivityManager.getActiveNetworkInfo(ConnectivityManager.java:563)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at info.androidhive.slidingmenu.jsonlib.Constants.isInternetAvailable(Constants.java:12)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at info.androidhive.slidingmenu.HomeFragment$ConnectionTask.onPostExecute(HomeFragment.java:91)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at info.androidhive.slidingmenu.HomeFragment$ConnectionTask.onPostExecute(HomeFragment.java:1)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at android.os.AsyncTask.finish(AsyncTask.java:632)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at android.os.Handler.dispatchMessage(Handler.java:102)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at android.os.Looper.loop(Looper.java:136)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at android.app.ActivityThread.main(ActivityThread.java:5017)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at java.lang.reflect.Method.invokeNative(Native Method)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at java.lang.reflect.Method.invoke(Method.java:515)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    04-20 21:00:40.740: E/AndroidRuntime(4742):     at dalvik.system.NativeStart.main(Native Method)

本地主机输出在这里:

{"android":[{"ProductID":"1","ProductName":"Şeker","CategoryName":"Tatlı","UnitPrice":"20"},{"ProductID":"2","ProductName":"Kuruyemiş","CategoryName":"Tuzl","UnitPrice":"200"},{"ProductID":"3","ProductName":"Baklagil","CategoryName":"Sebze","UnitPrice":"100"},{"ProductID":"4","ProductName":"Bulgur","CategoryName":"Sebze","UnitPrice":"10"}]}

谢谢..

【问题讨论】:

  • 错误的哪一部分你不明白?
  • 程序不能调试有什么原因吗?
  • 在我调试程序时应用已停止

标签: android asp.net json web-services android-asynctask


【解决方案1】:

Error parsing data org.json.JSONException: End of input at character 0 of

通常发生在您的服务器代码中存在错误且未返回有效 JSON 时。

【讨论】:

  • 那么如何解决问题?
  • 在您的 JSON 解析器中,使用 Log.i 打印您收到的 json 字符串并告诉我结果。你有没有测试过你的 .NET 代码,无论成功还是失败都会返回一个 json 字符串?
  • 谢谢,我会用Log,我会回复你的)
【解决方案2】:

如果您使用 Genymotion 或其他模拟器,则必须使用 http://10.0.3.2/ 而不是 http://localhost/ ...如果无法连接到 http://localhosthttp://127.0.0.1,则可以在模拟器上的资源管理器中尝试尝试 http://10.0.2.2 用于标准模拟器或 http://10.0.3.2 用于 Genymotion。

【讨论】:

    猜你喜欢
    • 2020-06-07
    • 1970-01-01
    • 2013-07-31
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2016-07-31
    相关资源
    最近更新 更多