hey there guys and girls, iv been trying to fix this problem for weeks now and carnt seem to get any help, i want the code to download a JSON file from my server and the save it to internal memory with the saveJSON() and then with the showJSON() it should display the saved JSON file and then decode it to plain text. the problems i get are around HttpResponse and the next line and also im not sure it the next section is also write where it should save the JSON file. here are the two errors im getting
Error in http connection java.net.SocketException: Permission denied
and
Error saving string null.pointer
any help would be greatly appreciated
public class MainActivity extends Activity {
String storyObj = "";
Object json = null;
HttpEntity entity = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//button that saves the file from mySQL
Button save = (Button) findViewById(R.id.downloadBtn);
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
saveJson();
}
});
//Button that opens the file from InternalMemory
Button open = (Button) findViewById(R.id.showBtn);
open.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openJson();
}
});
//end of onCreate()
}
//saveJson pull a JSON file from mySQl server then saves that file in its JSON type eg .json
public void saveJson(){
TextView test = (TextView) findViewById(R.id.showView);
try{
//connects to mySQL
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://10.0.2.2/textures_story_list.php");
HttpResponse response = client.execute(post);
//captures the response
entity = response.getEntity();
}catch(Exception e) {
Log.e("log_tag", "Error in http connection "+e.toString());
}
try{
Object json = entity;
String FILENAME = "story.json";
//gives file name
FileOutputStream output = openFileOutput(FILENAME, MODE_WORLD_READABLE);
//creates new StreamWriter
OutputStreamWriter writer = new OutputStreamWriter(output);
//writes json with file name story.json
writer.write((Integer) json);
writer.flush();
//closes writer
writer.close();
}catch(Exception e) {
Log.e("log_tag", "Error saving string "+e.toString());
}
//end of saveJson()
}
private char[] Object(Object json2) {
// TODO Auto-generated method stub
return null;
}
public void openJson(){
TextView test = (TextView) findViewById(R.id.showView);
try{
FileInputStream fileInput = openFileInput("story.json");
BufferedReader inputReader = new BufferedReader(new InputStreamReader(fileInput, "UTF-8"), 8);
StringBuilder strBuilder = new StringBuilder();
String line = null;
while ((line = inputReader.readLine()) != null) {
strBuilder.append(line + "\n");
}
fileInput.close();
storyObj = strBuilder.toString();
}catch(IOException e){
Log.e("log_tag", "Error building string "+e.toString());
}
try{
JSONArray jArray = new JSONArray(storyObj);
String storyNames = "";
for(int i = 0;i<jArray.length();i++){
storyNames += jArray.getJSONObject(i).getString("story_name") +"\n";
}
test.setText(storyNames);
}catch(JSONException e) {
Log.e("log_tag", "Error returning string "+e.toString());
}
return;
//and of openJson()
}
//end of class body
}
and here is my xml manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.game"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<users-permission
android:name="android.permission.INTERNET" />
<users-permission android:name="android.permission.SET_DEBUG_APP" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:debuggable="true">
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
You inserted the permission wrong. It has to be something like this
You used:
Where do you get the String nullpointer?
If this really is your Manifest file, the error is obvious .The tags should not be
use[r]s-permission
, butuses-permission
:Now you wouldn't have access to internet, and thus the error. If you switch to using an IDE like Eclipse and use autocomplete you will avoid such errors from the very beginning, but furthermore the IDE will underline this mistakes as warnings.
EDIT: About the error you get - you are trying to cast the entity of the response directly to an Integer. This will always fail, because Integer is not superclass of
HttpEntity
. You need to read the contents of the entity in aString
and then parse the contents of the string to integer:this is not highly optimized, but does the job. From then on you can use the
responseInteger
value as you like . However if you want to dowriter.write
you will needString
value, notInteger
. Thus I recommend you to useentityString
.