I've followed Wintech's tutorial for establishing a connection to an MS SQL database, and my result is getting 200 in the debugger, so I know it is connecting successfully. My problem is that I cannot get the results from the query to display in the app...
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.pmatthews.appointmentcreator.MainActivity">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="openWebpage"
android:src="@drawable/logo" />
<ScrollView
android:id="@+id/scroll"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="5dp"
android:layout_weight="1"
android:text="Appointment Number:"
android:textColor="#000000" />
<EditText
android:id="@+id/ApptNumView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:layout_marginTop="5dp"
android:layout_weight="1" />
<ImageButton
android:id="@+id/refreshButton"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/refresh"
android:onClick="testConnection" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:orientation="horizontal">
<TextView
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="5dp"
android:layout_weight="1"
android:text="Material Owner Number:"
android:textColor="#000000" />
<TextView
android:id="@+id/MatOwnNumView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:layout_marginTop="5dp"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="5dp"
android:layout_weight="6.5"
android:text="Carrier Number:"
android:textColor="#000000" />
<TextView
android:id="@+id/CarrNumView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:layout_marginTop="5dp"
android:layout_weight="4" />
<ImageButton
android:id="@+id/CarrNumButton"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/searchicon"
/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="82dp"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="5dp"
android:layout_weight="1"
android:text="Purchase Order Number:"
android:textColor="#000000" />
<EditText
android:id="@+id/PONInput"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:layout_marginTop="5dp"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="82dp"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="5dp"
android:layout_weight="1"
android:text="Release Number:"
android:textColor="#000000" />
<EditText
android:id="@+id/RelNumInput"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:layout_marginTop="5dp"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="5dp"
android:layout_weight="1"
android:text="Rail Car No:"
android:textColor="#000000" />
<EditText
android:id="@+id/RailCarInput"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:layout_marginTop="5dp"
android:layout_weight="1" />
</LinearLayout>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:text="Actuals"
android:textColor="#000000"
android:textSize="30sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/truckArrivedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_weight="1" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="7"
android:text="Truck has Arrived"
android:textColor="#000000" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="20dp"
android:layout_weight="1"
android:text="Bill Lading No In:"
android:textColor="#000000" />
<EditText
android:id="@+id/billNumInput"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:layout_marginTop="20dp"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="40dp"
android:layout_weight="1"
android:text="Arrival Date:"
android:textColor="#000000" />
<DatePicker
android:id="@+id/arrivalDateInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:datePickerMode="calendar"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="20dp"
android:layout_weight="1"
android:text="Arrival Time:"
android:textColor="#000000" />
<TimePicker
android:id="@+id/arrivalTimeInput"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:layout_marginTop="20dp"
android:layout_weight="1"
android:timePickerMode="spinner" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/recieveButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:text="Recieve Inventory" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/saveButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_weight="1"
android:text="Save"
/>
<Button
android:id="@+id/cancelButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:layout_weight="1"
android:text="Cancel" />
</LinearLayout>
</LinearLayout>
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"></ListView>
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
<TextView
android:id="@+id/txtConNum"
android:layout_width="fill_parent"
android:layout_height="100dp"/>
</LinearLayout>
</ScrollView>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
MainActivity.java:
package com.example.pandasai.project;
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.content.Intent;
import android.net.Uri;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import android.os.AsyncTask;
import android.widget.TableLayout;
import android.widget.TextView;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONObject;
import static com.example.pandasai.project.R.id.txtConNum;
public class MainActivity extends AppCompatActivity {
ArrayList<HashMap<String, String>> conNumList;
ListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
conNumList = new ArrayList<HashMap<String, String>>();
ListView list = (ListView) findViewById(R.id.list);
new GetConNum(MainActivity.this,
list).execute("http://xxx.xxx.xxx.xxx/LocalAppTest/Service1.svc/GetConNum");
}
class GetConNum extends AsyncTask<String, Void, String>{
String status = null;
Activity context;
ListView listView;
public GetConNum(Activity context, ListView listView){
this.context = context;
this.listView = listView;
}
protected void onPreExecute(){
}
protected String doInBackground(String... connUrl){
HttpURLConnection conn = null;
BufferedReader reader;
try{
final URL url = new URL(connUrl[0]);
conn = (HttpURLConnection) url.openConnection();
conn.addRequestProperty("Content-Type", "application/json;
charset=utf-8");
conn.setRequestMethod("GET");
int result = conn.getResponseCode();
if(result == 200){
InputStream in = new BufferedInputStream(conn.getInputStream());
reader = new BufferedReader(new InputStreamReader(in));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null){
status = line;
}
}
}catch(Exception ex){
}
return status;
}
protected void onPostExecute(String result){
super.onPostExecute(result);
if(result != null){
try{
ArrayList<String> stringArrayList = new ArrayList<String>();
JSONArray jsonArray = new JSONArray(result);
for(int i=0; i<jsonArray.length(); i++){
JSONObject object = jsonArray.getJSONObject(i);
String ControlNumber = object.getString("ControlNumber");
HashMap<String, String> itemList = new HashMap<String,
String>();
itemList.put("ControlNumber", ControlNumber);
conNumList.add(itemList);
}
adapter = new SimpleAdapter(MainActivity.this, conNumList,
R.layout.activity_main, new String[]{"ControlNumber"}, new int[]
{txtConNum});
((AdapterView<ListAdapter>) listView).setAdapter(adapter);
}catch(Exception ex){
ex.printStackTrace();
}
}else{
Toast.makeText(MainActivity.this, "Failed to connect.",
Toast.LENGTH_LONG).show();
}
}
}
public void openWebpage(View view){
Uri webLink = Uri.parse("http://examplesite.com");
Intent webLinkIntent = new Intent(Intent.ACTION_VIEW, webLink);
startActivity(webLinkIntent);
}
}
I'm not getting any errors that I know of, it just simply is not performing the way it was in Wintech's tutorials. I'm not sure what I missed. I purposely left out the POST bit because I don't intend to write to the database until later on. As for now, I'm just trying to get the results of a query displaying in a TextView in the app.
Wintech's tutorials:
Android - SQL Server Database Connectivity (Part - 1, Create a WCF web service)
Android - SQL Server Database Connectivity (Part - 2, Get & Post Data)
You are replacing last readline output so probably last line is \\n character. You should replace
while ((line = reader.readLine()) != null){
status = line;
}
with
while ((line = reader.readLine()) != null){
sb.append(line);
}
..
return sb.toString()
EDIT
protected String doInBackground(String... connUrl){
HttpURLConnection conn = null;
BufferedReader reader;
StringBuilder sb;
try{
final URL url = new URL(connUrl[0]);
conn = (HttpURLConnection) url.openConnection();
conn.addRequestProperty("Content-Type", "application/json;
charset=utf-8");
conn.setRequestMethod("GET");
int result = conn.getResponseCode();
if(result == 200){
InputStream in = new BufferedInputStream(conn.getInputStream());
reader = new BufferedReader(new InputStreamReader(in));
sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null){
sb.append(line);
}
}
}catch(Exception ex){
}
return sb.toString();
}
protected void onPostExecute(String result){
super.onPostExecute(result);
System.out.println(result);
}
I carefully ran through the debugger and saw it was storing the data from the query into result
. I added a TextView in the ListView, declared it as txtV
in AsyncTask
and in PostExecute
I added txtV.setText(result)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.