【发布时间】: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