바인더 클래스를 사용하여 MainActivity에서 ServiceAdapter 클래스로 문자열을 전달하려고합니다. 응용 프로그램은 단순히 one
이라는 EditText에 기록 된 내용을 가져 와서 그 문자열을 가져 와서 ServiceAdapter를 통해 전달합니다. ServiceAdapter는이 문자열을 가져 와서 텍스트 파일에 기록합니다. 내가 겪고있는 문제는 내가 단순히 메서드 안의 whats에 관계없이 ServiceAdapter 클래스의 메서드를 호출하면 치명적인 예외 오류가 발생한다는 것입니다. 나는 심지어 "안녕하세요 세상"을 인쇄하는 방법을 만들었고 충돌도 발생했습니다. 그래서 나는 여기서 무엇이 잘못되었는지를 확신하지 못한다. 감사합니다Android 바인딩 문자열을 onbind 서비스로 전달하면 충돌이 발생합니다.
// 주요 활동
Button BtnStart, BtnStop;
EditText Edt;
TextView one;
ServiceAdapter mService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BtnStart = (Button)findViewById(R.id.button1);
BtnStop = (Button) findViewById(R.id.button2);
Edt = (EditText) findViewById(R.id.editText1);
one = (TextView) findViewById(R.id.textView1);
}
public String GetText()
{
String Text = this.Edt.getText().toString();
return Text;
}
public void StartService(View v){
//start Service
//startService(new Intent(getBaseContext(), ServiceAdapter.class));
Intent i = new Intent(this,ServiceAdapter.class);
bindService(i, sc, Context.BIND_AUTO_CREATE);
Toast.makeText(getBaseContext(), "Service has been binded", Toast.LENGTH_LONG).show();
this.mService.StringToFile(GetText());
Toast.makeText(getBaseContext(), "Text Written", Toast.LENGTH_LONG).show();
}
public void StopService(View v){
//stop service
unbindService(sc);
Toast.makeText(getBaseContext(), "Service has been unbinded", Toast.LENGTH_LONG).show();
}
private ServiceConnection sc = new ServiceConnection()
{
@Override
public void onServiceDisconnected(ComponentName name)
{
}
@Override
public void onServiceConnected(ComponentName name, IBinder service)
{
LocalBinder binder = (LocalBinder) service;
mService = binder.getService();
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@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();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
// serviceAdapter
package com.example.modulefour;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.widget.Toast;
public class ServiceAdapter extends Service {
private final IBinder mBinder = new LocalBinder();
MainActivity main;
FileWriter fw;
BufferedWriter bw;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return mBinder;
}
//create new class to call binder
public class LocalBinder extends Binder{
public ServiceAdapter getService(){
return ServiceAdapter.this;
}
}
public void StringToFile(String x){
//write EditText to text file
String Text = x;
if(!Text.trim().equals(""))
{
File file = new File("TextFile.txt");
//if file doesn't exist, then create it
if(!file.exists())
{
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//write file
try {
fw = new FileWriter(file.getName(),true);
bw = new BufferedWriter(fw);
bw.write(Text);
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
감사합니다 (지금 어디에서 제거 그리고 물론,)
! 응용 프로그램이 더 이상 충돌하지 않지만 텍스트 파일을 전혀 만들지 않아 제대로 작동하는지 확실하지 않습니다. 파일을 만들 수있는 방법이 있습니까? 여기에 결함이있는 StringToFile() 메소드입니까? 아니면 다른 것입니까? – ssj3goku878
일반적으로 Environment.getExternalDirectory() + "\ your_filename"을 사용하여 항상 경로를 지정합니다. Android에서했던 것처럼 파일을 만드는 동작이 무엇인지 모르겠습니다. 그것을 사용하면, 당신은 파일을 "메인 사용자 폴더"(일반적으로 sdcard라고 함)에 만들어야합니다. – JML