2014-07-04 48 views
0

我對Android環境非常陌生。我徘徊在從網頁中檢索JSON內容的過程中,所以我發現本教程將從url中獲取JSON內容(Tutorial Link),並且它也適用於我的數據。在片段中加載JSON內容

現在,我想要做的事情:一個Tab應用程序,其中一個選項卡使用該代碼檢索JSON數據。我已經使用了片段,並試圖修改代碼以便與片段兼容,無論如何,當我啓動相關選項卡時,應用程序崩潰。

由於前面的教程正常工作,我很確定問題出在我的新手代碼上。

FragmentTab1.Java

package com.alessandrobocci.fenice; 
import java.util.ArrayList; 
import java.util.HashMap; 
import com.alessandrobocci.fenice.library.JSONParser; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import android.app.Fragment; 
import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 


public class FragmentTab1 extends Fragment { 
    ListView list; 
    TextView title; 
    TextView name; 
    TextView api; 
    Button Btngetdata; 
    ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>(); 

    //URL to get JSON Array 
    private static String url = "http://10.0.2.2/test/read.php"; 

    //JSON Node Names 
    private static final String TAG_OS = "todo"; 
    private static final String TAG_VER = "title"; 

    JSONArray arr = null; 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     //Inflate the layout for this fragment 
     //This layout contains your list view 
     View view = inflater.inflate(R.layout.fragmenttab1, container, false); 
     title = (TextView)getView().findViewById(R.id.vers); 
     //now you must initialize your list view 
     list =(ListView)view.findViewById(R.id.listnews); 
     new JSONParse().execute(); 

     return view; 
    } 
    private class JSONParse extends AsyncTask<String, String, JSONObject> { 
    private ProgressDialog pDialog; 
    @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(getActivity()); 
      pDialog.setMessage("Getting Data ..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show();    
    } 

    @Override 
     protected JSONObject doInBackground(String... args) { 

     JSONParser jParser = new JSONParser(); 
     // Getting JSON from URL 
     JSONObject json = jParser.getJSONFromUrl(url); 
     return json; 
    } 
    @Override 
    protected void onPostExecute(JSONObject json) { 
     pDialog.dismiss(); 
     try { 
      // Getting JSON Array from URL 
      arr = json.getJSONArray(TAG_OS); 
      for(int i = 0; i < arr.length(); i++){ 
      JSONObject c = arr.getJSONObject(i); 
      // Storing JSON item in a Variable 
      String ver = c.getString(TAG_VER); 
      // Adding value HashMap key => value 
      HashMap<String, String> map = new HashMap<String, String>(); 
      map.put(TAG_VER, ver); 
      oslist.add(map); 
      //list=(ListView) getView().findViewById(R.id.list); 
      ListAdapter adapter = new SimpleAdapter(getActivity(), oslist, 
       R.layout.list_v, 
       new String[] { TAG_VER }, new int[] { 
        R.id.vers}); 
      list.setAdapter(adapter); 
      list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, 
              int position, long id) { 
         Toast.makeText(getActivity(), "You Clicked at "+oslist.get(+position).get("title"), Toast.LENGTH_SHORT).show(); 
        } 
       }); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     } 
    } 
} 

的logcat:

07-04 14:59:36.250: D/gralloc_goldfish(1081): Emulator without GPU emulation detected. 
07-04 14:59:38.350: D/dalvikvm(1081): GC_CONCURRENT freed 154K, 10% free 6030K/6663K, paused 11ms+8ms 
07-04 14:59:38.690: W/System.err(1081): org.apache.http.conn.HttpHostConnectException: Connection to http://10.0.2.2 refused 
07-04 14:59:38.741: W/System.err(1081):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183) 
07-04 14:59:38.741: W/System.err(1081):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
07-04 14:59:38.881: W/System.err(1081):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
07-04 14:59:38.910: W/System.err(1081):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
07-04 14:59:38.910: W/System.err(1081):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
07-04 14:59:39.100: W/System.err(1081):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
07-04 14:59:39.150: W/System.err(1081):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
07-04 14:59:39.150: W/System.err(1081):  at com.alessandrobocci.fenice.library.JSONParser.getJSONFromUrl(JSONParser.java:38) 
07-04 14:59:39.200: W/System.err(1081):  at com.alessandrobocci.fenice.FragmentTab1$JSONParse.doInBackground(FragmentTab1.java:72) 
07-04 14:59:39.310: W/System.err(1081):  at com.alessandrobocci.fenice.FragmentTab1$JSONParse.doInBackground(FragmentTab1.java:1) 
07-04 14:59:39.330: W/System.err(1081):  at android.os.AsyncTask$2.call(AsyncTask.java:264) 
07-04 14:59:39.330: W/System.err(1081):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
07-04 14:59:39.390: W/System.err(1081):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
07-04 14:59:39.440: W/System.err(1081):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
07-04 14:59:39.440: W/System.err(1081):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
07-04 14:59:39.500: W/System.err(1081):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
07-04 14:59:39.510: W/System.err(1081):  at java.lang.Thread.run(Thread.java:856) 
07-04 14:59:39.510: W/System.err(1081): Caused by: java.net.ConnectException: socket failed: EACCES (Permission denied) 
07-04 14:59:39.611: W/System.err(1081):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:181) 
07-04 14:59:39.710: W/System.err(1081):  ... 16 more 
07-04 14:59:39.710: W/System.err(1081): Caused by: java.net.SocketException: socket failed: EACCES (Permission denied) 
07-04 14:59:39.870: W/System.err(1081):  at libcore.io.IoBridge.socket(IoBridge.java:573) 
07-04 14:59:39.870: W/System.err(1081):  at java.net.PlainSocketImpl.create(PlainSocketImpl.java:201) 
07-04 14:59:39.870: W/System.err(1081):  at java.net.Socket.checkOpenAndCreate(Socket.java:663) 
07-04 14:59:39.921: W/System.err(1081):  at java.net.Socket.connect(Socket.java:807) 
07-04 14:59:39.979: W/System.err(1081):  at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 
07-04 14:59:39.979: W/System.err(1081):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144) 
07-04 14:59:40.051: W/System.err(1081):  ... 16 more 
07-04 14:59:40.091: W/System.err(1081): Caused by: libcore.io.ErrnoException: socket failed: EACCES (Permission denied) 
07-04 14:59:40.210: W/System.err(1081):  at libcore.io.Posix.socket(Native Method) 
07-04 14:59:40.240: W/System.err(1081):  at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:169) 
07-04 14:59:40.260: W/System.err(1081):  at libcore.io.IoBridge.socket(IoBridge.java:558) 
07-04 14:59:40.310: W/System.err(1081):  ... 21 more 
07-04 14:59:40.370: E/Buffer Error(1081): Error converting result java.lang.NullPointerException 
07-04 14:59:40.380: E/JSON Parser(1081): Error parsing data org.json.JSONException: End of input at character 0 of 
07-04 14:59:40.390: D/AndroidRuntime(1081): Shutting down VM 
07-04 14:59:40.403: W/dalvikvm(1081): threadid=1: thread exiting with uncaught exception (group=0x409951f8) 
07-04 14:59:40.452: E/AndroidRuntime(1081): FATAL EXCEPTION: main 
07-04 14:59:40.452: E/AndroidRuntime(1081): java.lang.NullPointerException 
07-04 14:59:40.452: E/AndroidRuntime(1081):  at com.alessandrobocci.fenice.FragmentTab1$JSONParse.onPostExecute(FragmentTab1.java:80) 
07-04 14:59:40.452: E/AndroidRuntime(1081):  at com.alessandrobocci.fenice.FragmentTab1$JSONParse.onPostExecute(FragmentTab1.java:1) 
07-04 14:59:40.452: E/AndroidRuntime(1081):  at android.os.AsyncTask.finish(AsyncTask.java:602) 
07-04 14:59:40.452: E/AndroidRuntime(1081):  at android.os.AsyncTask.access$600(AsyncTask.java:156) 
07-04 14:59:40.452: E/AndroidRuntime(1081):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 
07-04 14:59:40.452: E/AndroidRuntime(1081):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-04 14:59:40.452: E/AndroidRuntime(1081):  at android.os.Looper.loop(Looper.java:137) 
07-04 14:59:40.452: E/AndroidRuntime(1081):  at android.app.ActivityThread.main(ActivityThread.java:4340) 
07-04 14:59:40.452: E/AndroidRuntime(1081):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-04 14:59:40.452: E/AndroidRuntime(1081):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-04 14:59:40.452: E/AndroidRuntime(1081):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
07-04 14:59:40.452: E/AndroidRuntime(1081):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
07-04 14:59:40.452: E/AndroidRuntime(1081):  at dalvik.system.NativeStart.main(Native Method) 

如果有必要,我會還發布了其他的代碼,我不認爲反正它是有用的,例如MainActivity .Java(包含Tabs)與簡單的FragmenTab代碼一起工作,可以檢索一些文本。 希望我清楚,謝謝。

+0

我們將能夠幫助你更好,如果你發佈你的logcat輸出。 –

+0

好的,我會發布,謝謝:) – alessandrob

+0

@Markviduka發佈完整的stacktrace。你更新沒有幫助 – Raghunandan

回答

0

我發現我的問題:

Android-Manifest.xml缺少這一行:

<uses-permission android:name="android.permission.INTERNET" /> 
1

更改此

title = (TextView)getView().findViewById(R.id.vers); 

title = (TextView)view.findViewById(R.id.vers); 

title可能是空導致NullPointerException可以,如果你發佈的堆棧跟蹤確認。

還有一個提示,您在for循環中設置了適配器。沒有必要這樣做。項添加到列表和設置適配器的ListView一次

+0

logcat的第一行錯誤添加在我的問題上,現在我會嘗試您的提示 – alessandrob

+1

@Markviduka更新沒有幫助。發佈完整堆棧跟蹤 – Raghunandan

+0

@Markviduka什麼是'FragmentTab1.java'行80 – Raghunandan