안드로이드 자바소스 오류

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
안드로이드 자바소스 오류

QA

안드로이드 자바소스 오류

본문

아래 소스중에   빨간색으로 표시된부분에 빨간색 밑줄이 쳐집니다
오류를 잡을려면 어찌해야 할까요.


package call.exam.jsh.telepo;

import android.Manifest;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.telephony.TelephonyManager;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import android.os.AsyncTask;
import android.widget.TextView;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URL;


import static android.R.attr.name;


import static call.exam.jsh.telepo.MainActivity.Test.myPhoneNumber;
import static call.exam.jsh.telepo.R.layout.activity_main;



public class MainActivity extends AppCompatActivity {
private Button button;
private Button button1;
Button button2;
Button button3;

TextView txtview;
phpdo task;





@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(activity_main);


String id = myPhoneNumber();
String name = "";


task = new phpdo();
txtview = (TextView) findViewById(R.id.txtView);

task.execute(id, name);




button = (Button) findViewById(R.id.button);
button1 = (Button) findViewById(R.id.button1);


button2 = (Button) findViewById(R.id.Button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Pop.class));
}
});

button3 = (Button) findViewById(R.id.Button3);
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Pop1.class));
}
});





button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 사용자의 OS 버전이 마시멜로우 이상인지 체크한다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
/** * 사용자 단말기의 권한 중 "전화걸기" 권한이 허용되어 있는지 확인한다. * Android는 C언어 기반으로 만들어졌기 때문에 Boolean 타입보다 Int 타입을 사용한다.
*
*/
int permissionResult = checkSelfPermission(Manifest.permission.CALL_PHONE);
/** * 패키지는 안드로이드 어플리케이션의 아이디이다. * 현재 어플리케이션이 CALL_PHONE에 대해 거부되어있는지 확인한다. */
if (permissionResult == PackageManager.PERMISSION_DENIED) {
/** * 사용자가 CALL_PHONE 권한을 거부한 적이 있는지 확인한다. * 거부한적이 있으면 True를 리턴하고 * 거부한적이 없으면 False를 리턴한다. */
if (shouldShowRequestPermissionRationale(Manifest.permission.CALL_PHONE)) {
AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("권한이 필요합니다.")
.setMessage("이 기능을 사용하기 위해서는 단말기의 \"전화걸기\" 권한이 필요합니다. 계속 하시겠습니까?")
.setPositiveButton("네", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
/** * 새로운 인스턴스(onClickListener)를 생성했기 때문에 * 버전체크를 다시 해준다. */
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// CALL_PHONE 권한을 Android OS에 요청한다.
requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 1000);
}
}
})
.setNegativeButton("아니요", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "기능을 취소했습니다", Toast.LENGTH_SHORT).show();
}
})
.create()
.show();
}
// 최초로 권한을 요청할 때
else {
// CALL_PHONE 권한을 Android OS에 요청한다.
requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 1000);
}
}
// CALL_PHONE의 권한이 있을 때
else {
// 즉시 실행
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:*** 개인정보보호를 위한 휴대폰번호 노출방지 ***"));
startActivity(intent);
}
}
// 마시멜로우 미만의 버전일 때
else {
// 즉시 실행
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:*** 개인정보보호를 위한 휴대폰번호 노출방지 ***"));
startActivity(intent);
}
}
});

button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 사용자의 OS 버전이 마시멜로우 이상인지 체크한다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
/** * 사용자 단말기의 권한 중 "전화걸기" 권한이 허용되어 있는지 확인한다. * Android는 C언어 기반으로 만들어졌기 때문에 Boolean 타입보다 Int 타입을 사용한다.
*
*/
int permissionResult = checkSelfPermission(Manifest.permission.CALL_PHONE);
/** * 패키지는 안드로이드 어플리케이션의 아이디이다. * 현재 어플리케이션이 CALL_PHONE에 대해 거부되어있는지 확인한다. */
if (permissionResult == PackageManager.PERMISSION_DENIED) {
/** * 사용자가 CALL_PHONE 권한을 거부한 적이 있는지 확인한다. * 거부한적이 있으면 True를 리턴하고 * 거부한적이 없으면 False를 리턴한다. */
if (shouldShowRequestPermissionRationale(Manifest.permission.CALL_PHONE)) {
AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("권한이 필요합니다.")
.setMessage("이 기능을 사용하기 위해서는 단말기의 \"전화걸기\" 권한이 필요합니다. 계속 하시겠습니까?")
.setPositiveButton("네", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
/** * 새로운 인스턴스(onClickListener)를 생성했기 때문에 * 버전체크를 다시 해준다. */
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// CALL_PHONE 권한을 Android OS에 요청한다.
requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 1000);
}
}
})
.setNegativeButton("아니요", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "기능을 취소했습니다", Toast.LENGTH_SHORT).show();
}
})
.create()
.show();
}
// 최초로 권한을 요청할 때
else {
// CALL_PHONE 권한을 Android OS에 요청한다.
requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 1000);
}
}
// CALL_PHONE의 권한이 있을 때
else {
// 즉시 실행
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:*** 개인정보보호를 위한 전화번호 노출방지 ***"));
startActivity(intent);
}
}
// 마시멜로우 미만의 버전일 때
else {
// 즉시 실행
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:*** 개인정보보호를 위한 전화번호 노출방지 ***"));
startActivity(intent);
}
}
});





}

public class Test
{
public static String myPhoneNumber() {
String myNumber = null;
TelephonyManager mgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
try{
myNumber = mgr.getLine1Number();
myNumber = myNumber.replace("+82", "0");
}catch(Exception e){}
return myNumber;
}
}






private class phpdo extends AsyncTask<String, Void, String> {

protected void onPreExecute() {

}


@Override
protected String doInBackground(String... arg0) {

try {
String id = arg0[0];

String link = "http://sun7684.dothome.co.kr/testquery.php?ID=" + id + "&NAME=" + name;
URL url = new URL(link);
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(link));
HttpResponse response = client.execute(request);
BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

StringBuffer sb = new StringBuffer("");
String line = "";

while ((line = in.readLine()) != null) {
sb.append(line);
break;
}
in.close();
return sb.toString();
} catch (Exception e) {
return new String("Exception: " + e.getMessage());
}




}











@Override
protected void onPostExecute(String result) {
//txtview.setText("Login Successful");
txtview.setText(result);

}







}

}

 

이 질문에 댓글 쓰기 :

답변 3

static 변수특성상 내장 변수, 객체들을 사용할 수 없습니다

아래 소스로 수정하면 먹힐 것입니다


 String id = myPhoneNumber(MainActivity.this);


public static String myPhoneNumber(Context context) {
String myNumber = null;
TelephonyManager mgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
try{
myNumber = mgr.getLine1Number();
myNumber = myNumber.replace("+82", "0");
}catch(Exception e){}
return myNumber;
}
}

로 수정하십시오


답변 감사합니다....
String id = myPhoneNumber(MainActivity.this);  이렇게 불러오면 전화번호가 어떻게 들어 가는지요??
String id = 핸드폰번호;  <- 이런식으로 들어 가나요??

String id = "핸드폰번호";    <- 이런식으로 들어가야 하거든요
어떻게 하면 핸드폰번호 앞뒤로 콤마가 붙여지나요??

android 의 getSystemService 라는 메소드가 그냥은 사용 못하는 거였네요


getSystemService 를 포함하는 메소드의 클래스는 Activity 를 상속받고 있거나


Context 객체로 접근

https://developer.android.com/reference/android/content/Context.html#getSystemService(java.lang.String) 

https://stackoverflow.com/questions/4870667/how-can-i-use-getsystemservice-in-a-non-activity-class-locationmanager


해야 하는것 같습니다.


근데 호출자 부분이 이미 Activity 를 상속받고 있는것 같습니다.

public class MainActivity extends AppCompatActivity {


제가 해당 환경을 확실히 모르겠지만

올바르게 Activity 가 상속되었다는 가정하에


public class Test 삭제 

import static call.exam.jsh.telepo.MainActivity.Test.myPhoneNumber; 삭제


후 MainActivity 에 메소드 추가하는 방식으로 해보면 될것 같네요



public class MainActivity extends AppCompatActivity {
    private Button button;
    private Button button1;
    Button button2;
    Button button3;

    TextView txtview;
    phpdo task;

    ...
    public String myPhoneNumber() {
        String myNumber = null; 
        TelephonyManager mgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
        try{ 
            myNumber = mgr.getLine1Number(); 
            myNumber = myNumber.replace("+82", "0"); 
        }catch(Exception e){} 
        return myNumber; 
    }
    ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(activity_main);
    
        String id = myPhoneNumber();
        ...
    }
    ... 
    ... 
}


안될경우 Context 객체로 접근하는 방법도 시도해보시면 될것 같습니다.

알려 주신대로 아래처럼 해봤는데

getSystemService  부분에 빨간색 밑줄이 쳐지네요.. ㅠㅠ

그럼 이제  Context 객체로 접근하는 방법  밖에 없는 건가요?

알려주신 위 링크 2개를 들어가 봣는데... 도무지 모르겠네요..

Context 객체 접근은 더욱 어렵네요 ㅠㅠ





public class MainActivity extends AppCompatActivity {
    private Button button;
    private Button button1;
    Button button2;
    Button button3;

    TextView txtview;
    phpdo task;


    public static String myPhoneNumber() {
        String myNumber = null;
        TelephonyManager mgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        try{
            myNumber = mgr.getLine1Number();
            myNumber = myNumber.replace("+82", "0");
        }catch(Exception e){}
        return myNumber;
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(activity_main);


        String id = myPhoneNumber();
        String name = "";

답변을 작성하시기 전에 로그인 해주세요.
전체 0
QA 내용 검색
  • 개별 목록 구성 제목 답변작성자조회작성일
  • 질문이 없습니다.

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT