-3

I have a program to read external data in SQL Server using php file. I've made two menu items such as news gets data from MySQL and banned list get the data from SQL Server. news menu and list of banned use the same code. news menu runs perfectly without any error but when I run the banned list, program auto close like this I http://prntscr.com/bdss23

And I saw on logcat there are errors like this

06-08 05:54:58.335    1276-1276/net.dragon_dev.www.dzoneconnect E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
        at net.dragon_dev.www.dzoneconnect.ListBannedActivity$LoadAllProducts$1.run(ListBannedActivity.java:189)
        at android.app.Activity.runOnUiThread(Activity.java:4673)
        at net.dragon_dev.www.dzoneconnect.ListBannedActivity$LoadAllProducts.onPostExecute(ListBannedActivity.java:178)
        at net.dragon_dev.www.dzoneconnect.ListBannedActivity$LoadAllProducts.onPostExecute(ListBannedActivity.java:106)
        at android.os.AsyncTask.finish(AsyncTask.java:631)
        at android.os.AsyncTask.access$600(AsyncTask.java:177)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5103)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:525)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
        at dalvik.system.NativeStart.main(Native Method)
06-08 06:07:57.667    1309-1309/net.dragon_dev.www.dzoneconnect E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
        at net.dragon_dev.www.dzoneconnect.ListBannedActivity$LoadAllProducts$1.run(ListBannedActivity.java:189)
        at android.app.Activity.runOnUiThread(Activity.java:4673)
        at net.dragon_dev.www.dzoneconnect.ListBannedActivity$LoadAllProducts.onPostExecute(ListBannedActivity.java:178)
        at net.dragon_dev.www.dzoneconnect.ListBannedActivity$LoadAllProducts.onPostExecute(ListBannedActivity.java:106)
        at android.os.AsyncTask.finish(AsyncTask.java:631)
        at android.os.AsyncTask.access$600(AsyncTask.java:177)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5103)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:525)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
        at dalvik.system.NativeStart.main(Native Method)

First error in logcat (ListBannedActivity.java:189)

getListView().setAdapter(adapter);

Second error in logcat (ListBannedActivity.java:178)

runOnUiThread(new Runnable() {

Third error in logcat (ListBannedActivity.java:106)

 class LoadAllProducts extends AsyncTask<String, String, String> {

My complete code in ListBannedActivity.java

public class ListBannedActivity extends AppCompatActivity {

Toolbar toolbar;
// Progress Dialog
private ProgressDialog pDialog;
// Creating JSON Parser object
JSONParser jParser = new JSONParser();

private ListView listView;

ArrayList<HashMap<String, String>> productsList;

// url to get all products list
private static String url_all_products = "http://192.168.1.111/top_kill.php";

// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_PRODUCTS = "topkill";
private static final String TAG_NAME = "Name";
private static final String TAG_KILL = "Kill";
private static final String TAG_DEATH = "Death";

// products JSONArray
JSONArray products = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_topkill);
    // ListView listView = (ListView) findViewById(android.R.id.list);
    // Hashmap for ListView
    productsList = new ArrayList<HashMap<String, String>>();

    // Loading products in Background Thread
    new LoadAllProducts().execute();

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    TypedValue typedValueColorPrimaryDark = new TypedValue();
    ListBannedActivity.this.getTheme().resolveAttribute(R.attr.colorPrimaryDark, typedValueColorPrimaryDark, true);
    final int colorPrimaryDark = typedValueColorPrimaryDark.data;
    if (Build.VERSION.SDK_INT >= 21) {
        getWindow().setStatusBarColor(colorPrimaryDark);
    }
}

// Get listview
protected ListView getListView(){
    if (listView == null) {
        listView = (ListView) findViewById(R.id.lista);
    }
    return listView;
}

// Response from Edit Product Activity
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // if result code 100
    if (resultCode == 100) {
        // if result code 100 is received
        // means user edited/deleted product
        // reload this screen again
        Intent intent = getIntent();
        finish();
        startActivity(intent);
    }
}

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

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(ListBannedActivity.this);
        pDialog.setMessage("Loading. Please wait...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }

    /**
     * getting All products 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_products, "GET", params);

        // Check your log cat for JSON reponse
        Log.d("All Products: ", json.toString());

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

            if (success == 1) {
                // products found
                // Getting Array of Products
                products = json.getJSONArray(TAG_PRODUCTS);

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

                    // Storing each json item in variable
                    String name = c.getString(TAG_NAME);
                    String kill = c.getString(TAG_KILL);
                    String death = c.getString(TAG_DEATH);

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

                    // adding each child node to HashMap key => value
                    map.put(TAG_NAME, name);
                    map.put(TAG_KILL, kill);
                    map.put(TAG_DEATH, death);

                    // adding HashList to ArrayList
                    productsList.add(map);
                }
            } else {
                Toast.makeText(getApplicationContext(), "Doesn't have banned players now", Toast.LENGTH_SHORT).show();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) {
        // dismiss the dialog after getting all products
        pDialog.dismiss();
        // updating UI from Background Thread
        runOnUiThread(new Runnable() {
            public void run() {
                /**
                 * Updating parsed JSON data into ListView
                 * */
                ListAdapter adapter = new SimpleAdapter(
                        ListBannedActivity.this, productsList,
                        R.layout.list_topkill, new String[]{
                        TAG_NAME, TAG_KILL, TAG_DEATH},
                        new int[]{R.id.name, R.id.timestamp, R.id.timestamp1});
                // updating listview
                getListView().setAdapter(adapter);
            }
        });
    }
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    MenuInflater inflater = getMenuInflater();
    getMenuInflater().inflate(R.menu.menu_news, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}

My code php like this

<?php
/* All database connection variables */
define('DB_USER', ""); // db user
define('DB_PASSWORD', ""); // db password
define('DB_DATABASE', "RF_World"); // database name
define('DB_SERVER', "127.0.0.1"); // db server

class DB_CONNECT {
// constructor
function __construct() {
    // connecting to database
    $this->connect();
}

// destructor
function __destruct() {
    // closing db connection
    $this->close();
}

/** Function to connect with database **/
function connect() {

    // Connecting to mssql database
    $con = mssql_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die(mssql_error());

    // Selecing database
    $db = mssql_select_db(DB_DATABASE) or die(mssql_error()) or die(mssql_error());

    // returing connection cursor
    return $con;
}

/** Function to close db connection **/
function close() {
    // closing db connection
    mssql_close();
}
}
/*
* Following code will list all the products
*/

// array for JSON response
$response = array();

// connecting to db
$db = new DB_CONNECT();

// get all news update dzc
$result = mssql_query("SELECT TOP 1 Name, [Kill], Death FROM tbl_pvporderview 
JOIN tbl_base
ON tbl_pvporderview.serial = tbl_base.Serial
ORDER BY [Kill] DESC;") or die(mssql_error());

 // check for empty result
 if (mssql_num_rows($result) > 0) {
 // looping through all results
 // products node
 $response["topkill"] = array();

 while ($row = mssql_fetch_array($result)) {
    // temp user array
    $product = array();
    $product["Name"] = $row["Name"];
    $product["Kill"] = ceil($row["[Kill]"]);
    $product["Death"] = ceil($row["Death"]);

    // push single product into final response array
    array_push($response["topkill"], $product);
}
// success
$response["success"] = 1;

// echoing JSON response
echo json_encode($response);
} else {
// no products found
$response["success"] = 0;
$response["message"] = "No News DZoneConnect Now";

// echo no users JSON
echo json_encode($response);
}
?>

anyone can help me to solve my problem?

thank's

Andre Pabertiyan
  • 13
  • 1
  • 1
  • 7
  • `onPostExecute` runs on the ui thread, you don't need to do the `runOnUiThread(new Runnable() {` part. Also http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it - your `listView` is still `null`, possibly because there is no no such view with id `R.id.lista` in `R.layout.activity_topkill` – zapl Jun 08 '16 at 10:32
  • yeah you right there is no R.id.lista and i change the layout and only get 1 error like this http://prntscr.com/bdtduq – Andre Pabertiyan Jun 08 '16 at 11:08

1 Answers1

0

Add this line in onCreate() method :

    listView = (ListView) findViewById(R.id.lista);

No need to make any method such as getListView(). And since you are not showing any progress make one change in your AsyncTask :

class LoadAllProducts extends AsyncTask<String, Void, String> // do this
Sharad Chauhan
  • 4,821
  • 2
  • 25
  • 50