2015-02-02 2 views
-1

Данные из базы данных MySQL загружаются должным образом. Однако всякий раз, когда я нажимаю кнопку, чтобы перейти к следующему действию, сила приложения закрывается.Android - Принудительное закрытие при переходе к следующей операции

Это говорит об ошибке на этой линии:

tvRName.setText(restaurantList.get(0).get(TAG_R_NAME)); 

пытался изо всех сил, чтобы отладить, но я не получаю никакой удачи. Можете ли вы посмотреть, пожалуйста? Огромное спасибо.


LogCat

02-03 04:23:01.628: E/AndroidRuntime(1601): FATAL EXCEPTION: main 
02-03 04:23:01.628: E/AndroidRuntime(1601): java.lang.NullPointerException 
02-03 04:23:01.628: E/AndroidRuntime(1601):  at com.capstone.restosnapp.RestoActivity$LoadAllRestaurant.onPostExecute(RestoActivity.java:167) 
02-03 04:23:01.628: E/AndroidRuntime(1601):  at com.capstone.restosnapp.RestoActivity$LoadAllRestaurant.onPostExecute(RestoActivity.java:1) 
02-03 04:23:01.628: E/AndroidRuntime(1601):  at android.os.AsyncTask.finish(AsyncTask.java:602) 
02-03 04:23:01.628: E/AndroidRuntime(1601):  at android.os.AsyncTask.access$600(AsyncTask.java:156) 
02-03 04:23:01.628: E/AndroidRuntime(1601):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 
02-03 04:23:01.628: E/AndroidRuntime(1601):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-03 04:23:01.628: E/AndroidRuntime(1601):  at android.os.Looper.loop(Looper.java:137) 
02-03 04:23:01.628: E/AndroidRuntime(1601):  at android.app.ActivityThread.main(ActivityThread.java:4340) 
02-03 04:23:01.628: E/AndroidRuntime(1601):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-03 04:23:01.628: E/AndroidRuntime(1601):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-03 04:23:01.628: E/AndroidRuntime(1601):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
02-03 04:23:01.628: E/AndroidRuntime(1601):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
02-03 04:23:01.628: E/AndroidRuntime(1601):  at dalvik.system.NativeStart.main(Native Method) 

RestoActivity.java

public class RestoActivity extends Activity { 

Button btnViewMenu; 

int loader; 
String image_url; 
ImageView image; 

// Creating JSON Parser object 
JSONParser jParser = new JSONParser(); 

ArrayList<HashMap<String, String>> restaurantList; 

// url to get all restaurant list 
private static String url_all_appetizer = "http://10.0.2.2/restosnapp_android/get_all_restaurant.php"; 

// private static String url_all_appetizer = 
// "http://webitprojects.com/restaurant/android/get_all_restaurant.php"; 

// JSON Node names 
private static final String TAG_SUCCESS = "success"; 
private static final String TAG_RESTAURANT = "restaurant"; 
private static final String TAG_RID = "rid"; 
private static final String TAG_R_NAME = "r_name"; 
private static final String TAG_R_DESC = "r_desc"; 
private static final String TAG_R_ADDR = "r_addr"; 
private static final String TAG_R_CONTACT = "r_contact"; 
private static final String TAG_R_EMAIL = "r_email"; 
private static final String TAG_R_WEBSITE = "r_website"; 
private static final String TAG_R_LOGO = "r_logo"; 

// restaurant JSONArray 
JSONArray restaurant = null; 

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

    // Imageview to show 
    image = (ImageView) findViewById(R.id.imgResto); 

    // Hashmap for ListView 
    restaurantList = new ArrayList<HashMap<String, String>>(); 

    // Loading restaurant in Background Thread 
    new LoadAllRestaurant().execute(); 

    btnViewMenu = (Button) findViewById(R.id.btnViewMenu); 
    btnViewMenu.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      showMenuActivity(); 
     } 

    }); 

} 

/** 
* Background Async Task to Load all product by making HTTP Request 
* */ 
class LoadAllRestaurant extends AsyncTask<String, String, String> { 

    /** 
    * getting All restaurant details from url 
    * */ 
    protected String doInBackground(String... args) { 
     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     // getting JSON string from URL 
     JSONObject json = jParser.makeHttpRequest(url_all_appetizer, "GET", 
       params); 

     // Check your log cat for JSON response 
     Log.d("Restaurant: ", json.toString()); 

     try { 
      // Checking for SUCCESS TAG 
      int success = json.getInt(TAG_SUCCESS); 

      if (success == 1) { 
       // restaurant found 
       // Getting Array of restaurant 
       restaurant = json.getJSONArray(TAG_RESTAURANT); 

       // looping through restaurant 
       for (int i = 0; i < restaurant.length(); i++) { 
        JSONObject c = restaurant.getJSONObject(i); 

        // Storing each json item in variable 
        String r_id = c.getString(TAG_RID); 
        String r_name = c.getString(TAG_R_NAME); 
        String r_desc = c.getString(TAG_R_DESC); 
        String r_addr = c.getString(TAG_R_ADDR); 
        String r_contact = c.getString(TAG_R_CONTACT); 
        String r_email = c.getString(TAG_R_EMAIL); 
        String r_website = c.getString(TAG_R_WEBSITE); 
        String r_logo = c.getString(TAG_R_LOGO); 

        // creating new HashMap 
        HashMap<String, String> map = new HashMap<String, String>(); 

        // adding each child node to HashMap key => value 
        map.put(TAG_RID, r_id); 
        map.put(TAG_R_NAME, r_name); 
        map.put(TAG_R_DESC, r_desc); 
        map.put(TAG_R_ADDR, r_addr); 
        map.put(TAG_R_CONTACT, r_contact); 
        map.put(TAG_R_EMAIL, r_email); 
        map.put(TAG_R_WEBSITE, r_website); 
        map.put(TAG_R_LOGO, r_logo); 

        // adding HashList to ArrayList 
        restaurantList.add(map); 
       } 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

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

     // ImageLoader class instance 
     Lazy_ImageLoader imgLoader = new Lazy_ImageLoader(
       getApplicationContext()); 

     image_url = restaurantList.get(0).get(TAG_R_LOGO); 
     imgLoader.DisplayImage(image_url, image); 

     TextView tvRName = (TextView) findViewById(R.id.tvResto); 
     TextView tvRAddr = (TextView) findViewById(R.id.tvAddr); 
     TextView tvRDesc = (TextView) findViewById(R.id.tvDesc); 
     TextView tvRContact = (TextView) findViewById(R.id.tvPhone); 
     TextView tvREmail = (TextView) findViewById(R.id.tvEmail); 
     TextView tvRWebsite = (TextView) findViewById(R.id.tvWeb); 

     tvRName.setText(restaurantList.get(0).get(TAG_R_NAME)); 
     tvRDesc.setText(restaurantList.get(0).get(TAG_R_DESC)); 
     tvRAddr.setText(restaurantList.get(0).get(TAG_R_ADDR)); 
     tvRContact.setText(restaurantList.get(0).get(TAG_R_CONTACT)); 
     tvREmail.setText(restaurantList.get(0).get(TAG_R_EMAIL)); 
     tvRWebsite.setText(restaurantList.get(0).get(TAG_R_WEBSITE)); 

     super.onPostExecute(result); 
    } 

} 

private void showMenuActivity() { 
    Intent i = new Intent(this, MenuListActivity.class); 
    startActivity(i); 
}} 

РЕДАКТИРОВАТЬ:

JSON

02-03 18:41:14.507: D/Restaurant:(3242): {"restaurant":[{"r_contact":"(082) 301-6065 \/ 0917-309-6008","r_addr":"4L TP 16 The Peak, 4th Level Gaisano Mall of Davao, Davao City","r_logo":"http:\/\/webitprojects.com\/restaurant\/images\/logo\/2_zabadani.jpg","r_website":"http:\/\/zabadanicafe.com\/","rid":"2","r_email":"[email protected]","r_name":"Zabadani Cafe","r_desc":"Zabadani Cafe is a Halal Middle Eastern Restaurant serving authentic dishes fused with Filipino taste in a semi-fine dining set-up; served generously at affordable prices."}],"success":1} 

restaurantList

02-03 18:41:39.127: I/System.out(3242): [{r_contact=(082) 301-6065/0917-309-6008, r_addr=4L TP 16 The Peak, 4th Level Gaisano Mall of Davao, Davao City, r_logo=http://webitprojects.com/restaurant/images/logo/2_zabadani.jpg, r_website=http://zabadanicafe.com/, rid=2, [email protected], r_name=Zabadani Cafe, r_desc=Zabadani Cafe is a Halal Middle Eastern Restaurant serving authentic dishes fused with Filipino taste in a semi-fine dining set-up; served generously at affordable prices.}] 

EDIT 2:

Когда я изменяю MenuListActivity.class к другой деятельности, это не для близко. Теперь я действительно смущен. Что может быть неправильным?

MenuListActivity.java

@SuppressLint("NewApi") 
public class MenuListActivity extends RestoActivity { 

Button btnViewAppetizer, btnViewMainCourse, btnViewDessert, btnViewDrinks; 

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

    // SHOW APPETIZER MENU 

    btnViewAppetizer = (Button) findViewById(R.id.btnViewAppetizer); 
    btnViewAppetizer.setOnClickListener(new View.OnClickListener() { 

     @SuppressWarnings("deprecation") 
     public void onClick(View v) { 
      showMenuAppetizer(); 
     } 
    }); 

    btnViewAppetizer.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       if (v == btnViewAppetizer) { 
        btnViewAppetizer 
          .setBackgroundResource(R.drawable.btn_appetizer); 
       } 
      } else if (event.getAction() == MotionEvent.ACTION_UP) { 
       if (v == btnViewAppetizer) { 
        btnViewAppetizer 
          .setBackgroundResource(R.drawable.btn_appetizer2); 
       } 
      } 
      return false; 
     } 
    }); 

    // SHOW MAIN COURSE MENU 

    btnViewMainCourse = (Button) findViewById(R.id.btnViewMainCourse); 
    btnViewMainCourse.setOnClickListener(new View.OnClickListener() { 

     @SuppressWarnings("deprecation") 
     public void onClick(View v) { 
      showMenuMainCourse(); 
     } 
    }); 

    btnViewMainCourse.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       if (v == btnViewMainCourse) { 
        btnViewMainCourse 
          .setBackgroundResource(R.drawable.btn_main_course); 
       } 
      } else if (event.getAction() == MotionEvent.ACTION_UP) { 
       if (v == btnViewMainCourse) { 
        btnViewMainCourse 
          .setBackgroundResource(R.drawable.btn_main_course2); 
       } 
      } 
      return false; 
     } 
    }); 

    // SHOW DESSERT MENU 

    btnViewDessert = (Button) findViewById(R.id.btnViewDessert); 
    btnViewDessert.setOnClickListener(new View.OnClickListener() { 

     @SuppressWarnings("deprecation") 
     public void onClick(View v) { 
      showMenuDessert(); 
     } 
    }); 

    btnViewDessert.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       if (v == btnViewDessert) { 
        btnViewDessert 
          .setBackgroundResource(R.drawable.btn_desserts); 
       } 
      } else if (event.getAction() == MotionEvent.ACTION_UP) { 
       if (v == btnViewDessert) { 
        btnViewDessert 
          .setBackgroundResource(R.drawable.btn_desserts2); 
       } 
      } 
      return false; 
     } 
    }); 

    // SHOW DRINKS MENU 

    btnViewDrinks = (Button) findViewById(R.id.btnViewDrinks); 
    btnViewDrinks.setOnClickListener(new View.OnClickListener() { 

     @SuppressWarnings("deprecation") 
     public void onClick(View v) { 
      showMenuDrinks(); 
     } 
    }); 

    btnViewDrinks.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       if (v == btnViewDrinks) { 
        btnViewDrinks 
          .setBackgroundResource(R.drawable.btn_drinks); 
       } 
      } else if (event.getAction() == MotionEvent.ACTION_UP) { 
       if (v == btnViewDrinks) { 
        btnViewDrinks 
          .setBackgroundResource(R.drawable.btn_drinks2); 
       } 
      } 
      return false; 
     } 
    }); 

} 

protected void showMenuAppetizer() { 
    // TODO Auto-generated method stub 
    Intent i = new Intent(this, Lazy_ListAppetizer.class); 
    startActivity(i); 
} 

protected void showMenuMainCourse() { 
    // TODO Auto-generated method stub 
    Intent i = new Intent(this, Lazy_ListMainCourse.class); 
    startActivity(i); 
} 

protected void showMenuDessert() { 
    // TODO Auto-generated method stub 
    Intent i = new Intent(this, Lazy_ListDessert.class); 
    startActivity(i); 
} 

protected void showMenuDrinks() { 
    // TODO Auto-generated method stub 
    Intent i = new Intent(this, Lazy_ListDrinks.class); 
    startActivity(i); 
}} 

ответ

1

ОТВЕТ:

На MenuListActivity.java я должен public class MenuListActivity extends Activity вместо public class MenuListActivity extends RestoActivity.

Глупый меня. Извините за то, что вы тратили свое время на ребята: 3

+0

nyce ........... – Elltz

0

Вы должны выполнить проверку в onPostExecute, чтобы убедиться, что success не 0 или что restuarantList не null. Не следует пытаться позвонить restaurantList.get(0), если success не был 1, потому что это означает, что restuarantList является null. Это объясняет ваш NullPointerException.

+0

Я уверен, что 'успех'' 1'. Если это не '1', я не получаю значения от JSON. Я также проверил значения 'restaurantList' и' restaurantList.get (0) ', это не' null'. – serendipochi

0
tvRName.setText(restaurantList.get(0).get(TAG_R_NAME)); 

Вы вызова методов на трех различных объектах здесь, один из них null. Используйте отладчик, чтобы перейти к этой линии и выяснить, какая из них null:

  • tvRName;
  • restaurantList;
  • restaurantList.get(0);
+0

Я использовал 'System.out.print' для получения значений' restaurantList' или 'restaurantList.get (0)'. Это не 'null'. Как tvRName быть пустым? – serendipochi

+0

Возможно, потому что 'R.layout.activity_resto' не содержит представления с идентификатором' tvResto'. – nhaarman

+0

У меня есть это на моем 'activity_resto.xml':' ' – serendipochi

0

Уверены ли вы в этом?«Это говорит об ошибке на этой линии:tvRName.setText(restaurantList.get(0).get(TAG_R_NAME));»

ваша ошибка: com.capstone.restosnapp.Lazy_ImageLoader.DisplayImage(Lazy_ImageLoader.java:49) фактор код imgLoader.DisplayImage(image_url, image);

imageLoader не нуль- (я не использую Lazy_ImageLoader, но вы уверены в intialisation), ваша строка не может быть, и ваш образ не может быть так, что проблема может быть считана/записи разрешения

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> и <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Смежные вопросы