Я создаю пользовательский интерфейс, используя фрагменты. В onCreate (Bundle savedInstanceState) я разбираю данные JSON. Я получаю следующую ошибку:
07-17 15: 23: 18.089: W/System.err(1368): at android.os.Looper.loop(Looper.java:132) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): FATAL EXCEPTION: main 07-17 15: 23: 18.129: E/AndroidRuntime (1368): java.lang.RuntimeException: не удается запустить Activity ComponentInfo {com.afghanread.android/com.afghanread.android.AfghanMagActivity}: android.view. InflateException: двоичная строка XML файла # 8: ошибка раздувания фрагмента класса 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1748) 07-17 15:23: 18.129: E/AndroidRuntime (1368): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1764) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at android.app.ActivityThread.access $ 1500 (ActivityThread.java:122) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1002) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at android.os.Handler.dispatchMessage(Handler.java:99) 07-17 15: 23: 18.129 : E/AndroidRuntime (1368): at android.os.Looper.loop(Looper.java:132) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at android.app.ActivityThread.main(ActivityThread. java: 4025) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at java.lang.reflect.Method.invokeNative (собственный метод) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): в java.lang.reflect.Method.invoke(Method.java:491) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit. java: 841) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at dalvik.system.NativeStart.main(Native Method) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): Caused by: android.view.InflateException: двоичная строка XML файла # 8: Ошибка раздувание фрагмента класса 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688) 07-17 15: 23: 18.129: E/AndroidRuntime (1368) : at android.view.LayoutInflater.rInflate(LayoutInflater.java:724) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at android.view.LayoutInflater.inflate(LayoutInflater.java:479) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at android.view.LayoutInflater.inflate(LayoutInflater.java:391) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): на android.view.LayoutInflater.inflate(LayoutInflater.java:347) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:223) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at android.app.Activity.setContentView(Activity.java:1780) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at com.afghanread.android. AfghanMagActivity.onCreate(AfghanMagActivity.java:26) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1712) 07-17 15 : 23: 18.129: E/AndroidRuntime (1368):... еще 11-17 15: 23: 18.129: E/AndroidRuntime (1368): вызвано: java.lang.NullPointerException 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:112) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at org.json.JSONTokener.nextValue(JSONTokener.java: 90) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at org.json.JSONObject. (JSONObject.java:154) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at org.json.JSONObject. (JSONObject.java:171) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at com.afghanread.android.CategoryFragment.parseJSON(CategoryFragment.java:72) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at com.afghanread.android.CategoryFragment.onCreateView(CategoryFragment.java:161) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at android.app. FragmentManagerImpl.moveToState(FragmentManager.java:713) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:90 5) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:983) 07-17 15: 23: 18.129: E/AndroidRuntime (1368): at android.app.Activity.onCreateView(Activity.java:4141)
Мой код:
public class CategoryFragment extends Fragment implements OnItemClickListener {
ArrayList<String> cat = new ArrayList<String>();
ListView list;
DatabaseManager manager;
static String DATABASE_NAME = "afghanread.sqlite";
static Integer DATABASE_VERSION = 1;
TextView text;
TextView cat_name;
int length;
String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
"Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", "Linux",
"OS/2" };
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
parseJSON();
manager = new DatabaseManager(null, DATABASE_NAME, null,
DATABASE_VERSION);
}
private void parseJSON() {
try {
JSONObject jObject = new JSONObject(getJSONData());
JSONArray jArray = jObject.getJSONArray("data");
length = jArray.length();
for (int i = 0; i < length; i++) {
JSONObject tmpJson = jArray.getJSONObject(i);
Category category = new Category();
category.setCategotyId(tmpJson.getInt("category_id"));
category.setCategoryName(tmpJson.getString("category_name"));
// manager.insertCategoryDetails(category);
}
System.out.println("Jason parsing successful.......");
} catch (JSONException e) {
e.printStackTrace();
}
}
private String getJSONData() {
HttpPost httpPost = null;
HttpClient httpClient = null;
HttpResponse httpResponse = null;
HttpEntity entity = null;
InputStream in = null;
BufferedReader reader = null;
StringBuilder sb = null;
String line = null;
String result = null;
try {
httpPost = new HttpPost(
"http://183.182.84.197:88/Sayyed_fahim/mobile/category.php");
httpClient = new DefaultHttpClient();
httpResponse = httpClient.execute(httpPost);
int statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode == 200) {
entity = httpResponse.getEntity();
in = entity.getContent();
reader = new BufferedReader(new InputStreamReader(in));
sb = new StringBuilder();
while ((line = reader.readLine()) != null)
sb.append(line);
result = sb.toString();
result = result.trim();
result = result.substring(1, result.length());
Log.i("RESULT", result);
} else
Log.e("Error", "" + statusCode);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
in = null;
}
httpPost = null;
httpClient = null;
httpResponse = null;
entity = null;
in = null;
reader = null;
sb = null;
line = null;
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
System.out.println("Inside the afghan Read category");
View view = (View) inflater.inflate(R.layout.categoryfragment, null);
list = (ListView) view.findViewById(R.id.cat_list);
/*
* ArrayAdapter<String> adapter = new
* ArrayAdapter<String>(getActivity(),
* android.R.layout.simple_list_item_1, values);
*/
parseJSON();
list.setAdapter(new CustomAdapter(getActivity(), R.layout.categoryitem,
values));
list.setOnItemClickListener(this);
return view;
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
String item = (String) values[arg2];
LibraryFragment fragment = (LibraryFragment) getFragmentManager()
.findFragmentById(R.id.library);
if (fragment != null && fragment.isInLayout()) {
fragment.setText(item);
} else {
Intent intent = new Intent(getActivity().getApplicationContext(),
LibraryActivity.class);
intent.putExtra("value", item);
startActivity(intent);
}
}
public class CustomAdapter extends BaseAdapter {
String names[];
Context mCtx;
int item;
LayoutInflater inflater;
public CustomAdapter(Context ctx, int categoryitem, String[] values) {
this.names = values;
this.mCtx = ctx;
this.item = categoryitem;
inflater = (LayoutInflater) ctx
.getSystemService(getActivity().LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return names.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(item, null);
cat_name = (TextView) convertView.findViewById(R.id.cat_name);
}
cat_name.setText(names[position]);
return convertView;
}
}
}
Как решить проблему?
Я предполагаю, что веб-вызов new JSONObject(getJSONData())
неудачно, и вы передаете значение null в new JSONObject(getJSONData())
.
Является JSONObject jObject = новый JSONObject (getJSONData()); строка 72, как указано в качестве источника для nullpointer в выводе logcat: com.afghanread.android.CategoryFragment.parseJSON(CategoryFragment.java:72)?
Не полностью связано с ошибкой, но также и большая проблема в вашем коде. Вы делаете веб-камеру внутри UI-Thread. Это заблокирует телефон до тех пор, пока данные json не будут загружены с вашего сервера. Вы должны по крайней мере поместить весь код загрузки данных внутри AsyncTask и обновить свой пользовательский интерфейс в методе onPostExecute.